<?php

namespace app\common\model;

use think\Model;

/**
 * 动态点赞模型
 * 用于处理动态的点赞功能，记录用户对动态的点赞状态
 * 数据表字段：
 * - id: 点赞记录ID
 * - post_id: 所属动态ID
 * - user_id: 点赞用户ID
 * - created_at: 点赞时间
 */
class PostLike extends Model
{
    // 表名
    protected $name = 'post_like';

    /**
     * 添加点赞
     * 用户对动态进行点赞，同一用户对同一动态只能点赞一次
     * 点赞成功后会自动更新动态的点赞数
     * 
     * @param int $post_id 动态ID
     * @param int $user_id 用户ID
     * @return bool 点赞成功返回true，已点赞返回false
     */
    public static function addLike($post_id, $user_id)
    {
        // 检查用户是否已经点赞过该动态
        $exist = self::where('post_id', $post_id)
            ->where('user_id', $user_id)
            ->find();
        
        // 如果已点赞，返回false
        if ($exist) {
            return false; // 已点赞，不能重复点赞
        }
        
        // 添加点赞记录到数据库
        $result = self::create([
            'post_id' => $post_id,
            'user_id' => $user_id
        ]);
        
        // 如果点赞记录添加成功，更新动态的点赞数
        if ($result) {
            // 使用setInc方法自增点赞数
            Post::where('id', $post_id)->setInc('like_count');
            return true;
        }
        
        return false;
    }

    /**
     * 取消点赞
     * 用户取消对动态的点赞，只能取消自己的点赞
     * 取消点赞成功后会自动更新动态的点赞数
     * 
     * @param int $post_id 动态ID
     * @param int $user_id 用户ID
     * @return bool 取消点赞成功返回true，未点赞返回false
     */
    public static function cancelLike($post_id, $user_id)
    {
        // 检查用户是否已经点赞过该动态
        $exist = self::where('post_id', $post_id)
            ->where('user_id', $user_id)
            ->find();
        
        // 如果未点赞，返回false
        if (!$exist) {
            return false; // 未点赞，无法取消
        }
        
        // 从数据库中删除点赞记录
        $result = self::where('post_id', $post_id)
            ->where('user_id', $user_id)
            ->delete();
        
        // 如果点赞记录删除成功，更新动态的点赞数
        if ($result) {
            // 使用setDec方法减少点赞数
            Post::where('id', $post_id)->setDec('like_count');
            return true;
        }
        
        return false;
    }

    /**
     * 检查用户是否已点赞
     * 判断指定用户是否已对指定动态进行点赞
     * 
     * @param int $post_id 动态ID
     * @param int $user_id 用户ID
     * @return bool 已点赞返回true，未点赞返回false
     */
    public static function isLiked($post_id, $user_id)
    {
        // 查询点赞记录数量，大于0表示已点赞
        return self::where('post_id', $post_id)
            ->where('user_id', $user_id)
            ->count() > 0;
    }
}